<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.9.0">
  <meta charset="utf-8">
  <title>MySQL中的锁 | lopeasd的个人博客</title>
  <meta name="keywords" content>
  <meta name="description" content="MySQL中的锁 | lopeasd的个人博客">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="hello java categoties">
<meta name="keywords" content="test">
<meta property="og:type" content="article">
<meta property="og:title" content="test">
<meta property="og:url" content="http://yoursite.com/2019/09/27/test/index.html">
<meta property="og:site_name" content="lopeasd的个人博客">
<meta property="og:description" content="hello java categoties">
<meta property="og:locale" content="en">
<meta property="og:updated_time" content="2019-09-27T04:09:33.624Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="test">
<meta name="twitter:description" content="hello java categoties">


<link rel="icon" href="/img/avatar.jpg">

<link href="/css/style.css?v=1.0.1" rel="stylesheet">

<link href="/css/hl_theme/github.css?v=1.0.1" rel="stylesheet">

<link href="//cdn.bootcss.com/animate.css/3.5.2/animate.min.css" rel="stylesheet">
<link href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

<script src="//cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="/js/jquery.autocomplete.min.js?v=1.0.1"></script>

<script src="//cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>
<script>
    hljs.initHighlightingOnLoad();
</script>

<script src="//cdn.bootcss.com/nprogress/0.2.0/nprogress.min.js"></script>



<script src="//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

<script src="/js/iconfont.js?v=1.0.1"></script>

</head>
<div style="display: none">
  <input class="theme_disqus_on" value="false">
  <input class="theme_preload_comment" value="false">
  <input class="theme_blog_path" value>
</div>

<body>
<aside class="nav">
    <div class="nav-left">
        <a href="/" class="avatar_target">
    <img class="avatar" src="/img/avatar.jpg" />
</a>
<div class="author">
    <span>shi_x_f</span>
</div>

<div class="icon">
    
        
    
        
        <a title="github" href="https://github.com/lopeasd" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-github"></use>
                </svg>
            
        </a>
        
    
        
    
        
    
        
    
        
    
        
    
        
    
        
    
        
    
        
    
        
    
        
    
        
    
        
        <a title="qq" href="http://wpa.qq.com/msgrd?v=3&uin=3342865499&site=qq&menu=yes" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-qq"></use>
                </svg>
            
        </a>
        
    
        
    
        
    
</div>




<ul>
    <li><div class="all active">全部文章<small>(3)</small></div></li>
    
        
            
            <li><div data-rel="java">java<small>(1)</small></div>
                
            </li>
            
        
    
</ul>
<div class="left-bottom">
    <div class="menus">
    
    
    
    
    </div>
    <div><a class="about  hasFriend  site_url"  href="/about">关于</a><a style="width: 50%"  class="friends">友链</a></div>
</div>
<input type="hidden" id="yelog_site_posts_number" value="3">
<input type="hidden" id="yelog_site_word_count" value="1.8k">
<div style="display: none">
    <span id="busuanzi_value_site_uv"></span>
    <span id="busuanzi_value_site_pv"></span>
</div>

    </div>
    <div class="nav-right">
        <div class="friends-area">
    <div class="friends-title">
        友情链接
        <i class="back-title-list"></i>
    </div>
    <div class="friends-content">
        <ul>
            
            <li><a target="_blank" href="https://www.google.com">google</a></li>
            
        </ul>
    </div>
</div>
        <div class="title-list">
    <form onkeydown="if(event.keyCode==13){return false;}">
        <input class="search" type="text" placeholder="Search..." autocomplete="off"id="local-search-input" >
        <i class="cross"></i>
        <span>
            <label for="tagswitch">Tags:</label>
            <input id="tagswitch" type="checkbox" style="display: none" />
            <i id="tagsWitchIcon"></i>
        </span>
    </form>
    <div class="tags-list">
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color5">test</a>
    </li>
    
    <div class="clearfix"></div>
</div>

    
    <nav id="title-list-nav">
        
        <a  class=""
           href="/2019/09/27/MySQL锁/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="MySQL中的锁">MySQL中的锁</span>
            <span class="post-date" title="2019-09-27 11:04:54">2019/09/27</span>
        </a>
        
        <a  class=""
           href="/2019/09/26/hello-world/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="Hello World">Hello World</span>
            <span class="post-date" title="2019-09-26 22:33:22">2019/09/26</span>
        </a>
        
        <a  class="java "
           href="/2019/09/27/test/"
           data-tag="test"
           data-author="" >
            <span class="post-title" title="test">test</span>
            <span class="post-date" title="2019-09-27 12:08:46">2019/09/27</span>
        </a>
        
    </nav>
</div>
    </div>
    <div class="hide-list">
        <div class="semicircle">
            <div class="brackets first"><</div>
            <div class="brackets">&gt;</div>
        </div>
    </div>
</aside>
<div class="post">
    <div class="pjax">
        <article id="post-MySQL锁" class="article article-type-post" itemscope itemprop="blogPost">
    
        <h1 class="article-title">MySQL中的锁</h1>
    
    <div class="article-meta">
        
        
        
        
    </div>
    <div class="article-meta">
        
        创建时间:<time class="date" title='更新时间: 2019-09-27 12:09:47'>2019-09-27 11:04</time>
        
    </div>
    <div class="article-meta">
        
        <span>字数:1.7k</span>
        
        
        <span id="busuanzi_container_page_pv">
            阅读:<span id="busuanzi_value_page_pv">
                <span class="count-comment">
                    <span class="spinner">
                      <div class="cube1"></div>
                      <div class="cube2"></div>
                    </span>
                </span>
            </span>
        </span>
        
        
    </div>
    
    <div class="toc-ref">
    
        <ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#MySQL锁"><span class="toc-text">MySQL锁</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#锁机制与InnoDB锁算法"><span class="toc-text">锁机制与InnoDB锁算法</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#一、MyISAM和InnoDB存储引擎使用的锁："><span class="toc-text">一、MyISAM和InnoDB存储引擎使用的锁：</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#二、表级锁和行级锁对比："><span class="toc-text">二、表级锁和行级锁对比：</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#三、InnoDB存储引擎的锁的算法有三种："><span class="toc-text">三、InnoDB存储引擎的锁的算法有三种：</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#四、相关知识点："><span class="toc-text">四、相关知识点：</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#五、InnoDB使用的七种锁"><span class="toc-text">五、InnoDB使用的七种锁</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#六、锁的分类"><span class="toc-text">六、锁的分类</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#①从对数据操作的类型分"><span class="toc-text">①从对数据操作的类型分</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#②从对数据操作的粒度分"><span class="toc-text">②从对数据操作的粒度分</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#一、表级锁"><span class="toc-text">一、表级锁</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#一、语法"><span class="toc-text">一、语法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#二、读锁（S锁，共享锁）"><span class="toc-text">二、读锁（S锁，共享锁）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#三、写锁（X锁，排他锁）"><span class="toc-text">三、写锁（X锁，排他锁）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#总结"><span class="toc-text">总结</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#二、行级锁"><span class="toc-text">二、行级锁</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#锁命令"><span class="toc-text">锁命令</span></a></li></ol></li></ol>
    
<style>
    .left-col .switch-btn,
    .left-col .switch-area {
        display: none;
    }
    .toc-level-3 i,
    .toc-level-3 ol {
        display: none !important;
    }
</style>
</div>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h1 id="MySQL锁"><a href="#MySQL锁" class="headerlink" title="MySQL锁"></a>MySQL锁</h1><h2 id="锁机制与InnoDB锁算法"><a href="#锁机制与InnoDB锁算法" class="headerlink" title="锁机制与InnoDB锁算法"></a>锁机制与InnoDB锁算法</h2><h3 id="一、MyISAM和InnoDB存储引擎使用的锁："><a href="#一、MyISAM和InnoDB存储引擎使用的锁：" class="headerlink" title="一、MyISAM和InnoDB存储引擎使用的锁："></a>一、MyISAM和InnoDB存储引擎使用的锁：</h3><ul>
<li>MyISAM采用表级锁(table-level locking)。</li>
<li>InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁</li>
</ul>
<h3 id="二、表级锁和行级锁对比："><a href="#二、表级锁和行级锁对比：" class="headerlink" title="二、表级锁和行级锁对比："></a>二、表级锁和行级锁对比：</h3><ul>
<li><strong>表级锁：</strong> MySQL中锁定 <strong>粒度最大</strong> 的一种锁，对当前操作的整张表加锁，实现简单，资源消耗也比较少，加锁快，不会出现死锁。其锁定粒度最大，触发锁冲突的概率最高，并发度最低，MyISAM和 InnoDB引擎都支持表级锁。</li>
<li><strong>行级锁：</strong> MySQL中锁定 <strong>粒度最小</strong> 的一种锁，只针对当前操作的行进行加锁。 行级锁能大大减少数据库操作的冲突。其加锁粒度最小，并发度高，但加锁的开销也最大，加锁慢，会出现死锁。</li>
</ul>
<p>详细内容可以参考： MySQL锁机制简单了解一下：<a href="https://blog.csdn.net/qq_34337272/article/details/80611486" target="_blank" rel="noopener">https://blog.csdn.net/qq_34337272/article/details/80611486</a></p>
<h3 id="三、InnoDB存储引擎的锁的算法有三种："><a href="#三、InnoDB存储引擎的锁的算法有三种：" class="headerlink" title="三、InnoDB存储引擎的锁的算法有三种："></a>三、InnoDB存储引擎的锁的算法有三种：</h3><ul>
<li>Record lock：单个行记录上的锁</li>
<li>Gap lock：间隙锁，锁定一个范围，不包括记录本身</li>
<li>Next-key lock：record+gap 锁定一个范围，包含记录本身</li>
</ul>
<h3 id="四、相关知识点："><a href="#四、相关知识点：" class="headerlink" title="四、相关知识点："></a>四、相关知识点：</h3><ol>
<li>innodb对于行的查询使用next-key lock</li>
<li>Next-locking keying为了解决Phantom Problem幻读问题</li>
<li>当查询的索引含有唯一属性时，将next-key lock降级为record key</li>
<li>Gap锁设计的目的是为了阻止多个事务将记录插入到同一范围内，而这会导致幻读问题的产生</li>
<li>有两种方式显式关闭gap锁：（除了外键约束和唯一性检查外，其余情况仅使用record lock） A. 将事务隔离级别设置为RC B. 将参数innodb_locks_unsafe_for_binlog设置为1</li>
</ol>
<h3 id="五、InnoDB使用的七种锁"><a href="#五、InnoDB使用的七种锁" class="headerlink" title="五、InnoDB使用的七种锁"></a>五、InnoDB使用的七种锁</h3><p>锁是计算机协调多个进程或线程并发访问某一资源的机制。</p>
<p>  在数据库中，除传统的计算资源（如CPU、RAM、I/O等）的争用以外，数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题，锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说，锁对数据库而言显得尤其重要，也更加复杂。</p>
<p><img src="img%5C1566010389998.png" alt="1566010389998"></p>
<h3 id="六、锁的分类"><a href="#六、锁的分类" class="headerlink" title="六、锁的分类"></a>六、锁的分类</h3><h4 id="①从对数据操作的类型分"><a href="#①从对数据操作的类型分" class="headerlink" title="①从对数据操作的类型分"></a>①从对数据操作的类型分</h4><p>读锁(共享锁share简称S锁)：针对同一份数据，多个读操作可以同时进行而不会互相影响。</p>
<p>写锁（排它锁Exclusive简称X锁）：当前写操作没有完成前，它会阻断其他写锁和读锁。</p>
<h4 id="②从对数据操作的粒度分"><a href="#②从对数据操作的粒度分" class="headerlink" title="②从对数据操作的粒度分"></a>②从对数据操作的粒度分</h4><p>表锁：偏向MyISAM存储引擎，开销小，加锁快；无死锁；锁定粒度大，发生锁冲突的概率最高,并发度最低。</p>
<p>行锁：偏向InnoDB存储引擎，开销大，加锁慢；会出现死锁；锁定粒度最小，发生锁冲突的概率最低,并发度也最高。</p>
<h2 id="一、表级锁"><a href="#一、表级锁" class="headerlink" title="一、表级锁"></a>一、表级锁</h2><p>Mysql中锁定 粒度最大 的一种锁，对当前操作的整张表加锁，实现简单 ，资源消耗也比较少，加锁快，不会出现死锁 。其锁定粒度最大，触发锁冲突的概率最高，并发度最低，MyISAM和 InnoDB引擎都支持表级锁。</p>
<h3 id="一、语法"><a href="#一、语法" class="headerlink" title="一、语法"></a>一、语法</h3><p>MyISAM：</p>
<p>添加表锁：</p>
<pre><code class="mysql"> lock table 表名字1 read(write)，表名字2 read(write)，其它;</code></pre>
<p>查看表上加过的锁</p>
<pre><code class="mysql"> show open tables where In_use&gt;0;</code></pre>
<p><img src="img%5C1566009658033.png" alt="1566009658033"></p>
<p><img src="img%5C1566009689622.png" alt="1566009689622"></p>
<p>释放表锁</p>
<pre><code class="mysql">unlock tables;</code></pre>
<h3 id="二、读锁（S锁，共享锁）"><a href="#二、读锁（S锁，共享锁）" class="headerlink" title="二、读锁（S锁，共享锁）"></a>二、读锁（S锁，共享锁）</h3><pre><code class="mysql">lock table table_name read;</code></pre>
<p><img src="img%5C1566013273737.png" alt="1566013273737"></p>
<table>
<thead>
<tr>
<th>当前session可以查询该表记录</th>
<th>其他session也可以查询该表的记录</th>
</tr>
</thead>
<tbody><tr>
<td>当前session不能查询其它没有锁定的表</td>
<td>其他session可以查询或者更新未锁定的表</td>
</tr>
<tr>
<td>当前session中插入或者更新锁定的表都会提示错误</td>
<td>其他session插入或者更新锁定表会一直等待获得锁</td>
</tr>
</tbody></table>
<p>①</p>
<p><img src="img%5C1566013706651.png" alt="1566013706651"></p>
<p>②</p>
<p><img src="img%5C1566013731621.png" alt="1566013731621"></p>
<p><strong>释放锁</strong></p>
<pre><code class="mysql">unlock tables;</code></pre>
<p>session2获得锁，插入操作完成</p>
<p><img src="img%5C1566013962187.png" alt="1566013962187"></p>
<h3 id="三、写锁（X锁，排他锁）"><a href="#三、写锁（X锁，排他锁）" class="headerlink" title="三、写锁（X锁，排他锁）"></a>三、写锁（X锁，排他锁）</h3><pre><code class="mysql">lock table table_name write;</code></pre>
<p>当前session可以读，可以改，其他session查询修改，都将被阻塞</p>
<p>锁表前，如果session2有数据缓存，锁表以后，在锁住的表不发生改变的情况下session2可以读出缓存数据，一旦数据发生改变，缓存将失效，操作将被阻塞住。</p>
<p>①</p>
<p><img src="img%5C1566030989043.png" alt="1566030989043"></p>
<p>②</p>
<p><img src="img%5C1566030926583.png" alt="1566030926583"></p>
<h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>MyISAM在执行查询语句（SELECT）前，会自动给涉及的所有表加读锁，在执行增删改操作前，会自动给涉及的表加写锁。 </p>
<table>
<thead>
<tr>
<th>锁类型</th>
<th>当前session可读</th>
<th>当前session可写</th>
<th>自己可操作其他表</th>
<th>其他session可读</th>
<th>其他session可写</th>
</tr>
</thead>
<tbody><tr>
<td>读锁</td>
<td>Y</td>
<td>N</td>
<td>N</td>
<td>Y</td>
<td>N,等待释放锁</td>
</tr>
<tr>
<td>写锁</td>
<td>Y</td>
<td>Y</td>
<td>N</td>
<td>N,等待释放锁</td>
<td>N,等待释放锁</td>
</tr>
</tbody></table>
<p>结合上表，所以对MyISAM表进行操作，会有以下情况：<br>  1、对MyISAM表的读操作（加读锁），不会阻塞其他进程对同一表的读请求，但会阻塞对同一表的写请求。只有当读锁释放后，才会执行其它进程的写操作。<br>  2、对MyISAM表的写操作（加写锁），会阻塞其他进程对同一表的读和写操作，只有当写锁释放后，才会执行其它进程的读写操作。<br> 简而言之，就是读锁会阻塞写，但是不会堵塞读。而写锁则会把读和写都堵塞</p>
<h2 id="二、行级锁"><a href="#二、行级锁" class="headerlink" title="二、行级锁"></a>二、行级锁</h2><p>Mysql中锁定 粒度最小 的一种锁，只针对当前操作的行进行加锁。 行级锁能大大减少数据库操作的冲突。其加锁粒度最小，并发度高，但加锁的开销也最大，加锁慢，会出现死锁。 InnoDB支持的行级锁，包括如下几种。</p>
<p>Record Lock: 对索引项加锁，锁定符合条件的行。其他事务不能修改和删除加锁项；<br>Gap Lock: 对索引项之间的“间隙”加锁，锁定记录的范围（对第一条记录前的间隙或最后一条将记录后的间隙加锁），不包含索引项本身。其他事务不能在锁范围内插入数据，这样就防止了别的事务新增幻影行。<br>Next-key Lock： 锁定索引项本身和索引范围。即Record Lock和Gap Lock的结合。可解决幻读问题。</p>
<h2 id="锁命令"><a href="#锁命令" class="headerlink" title="锁命令"></a>锁命令</h2><pre><code class="mysql">#查询是否锁表
show OPEN TABLES where In_use &gt; 0;
#查看所有进程
show processlist; 
show full processlist;
#查询到相对应的进程===然后 kill id

#杀掉指定mysql连接的进程号
kill $pid
#查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 
#查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 
#查看innodb引擎的运行时信息
show engine innodb status\G;
#查看造成死锁的sql语句，分析索引情况，然后优化sql语句；

#查看服务器状态
show status like &#39;%lock%&#39;;
#查看超时时间：
show variables like &#39;%timeout%&#39;;</code></pre>

      
       <hr><span style="font-style: italic;color: gray;"> 转载请注明来源，欢迎对文章中的引用来源进行考证，欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论，也可以邮件至 jaytp@qq.com </span>
    </div>
</article>


<p>
    <a href="javascript:void(0)" class="dashang" onclick="dashangToggle()">赏</a>
</p>


<div class="article_copyright">
    <p><span class="copy-title">文章标题:</span>MySQL中的锁</p>
    <p><span class="copy-title">文章字数:</span><span class="post-count">1.7k</span></p>
    <p><span class="copy-title">本文作者:</span><a href="javascript:void(0)" title="shi_x_f">shi_x_f</a></p>
    <p><span class="copy-title">发布时间:</span>2019-09-27, 11:04:54</p>
    <p><span class="copy-title">最后更新:</span>2019-09-27, 12:09:47</p>
    <span class="copy-title">原始链接:</span><a class="post-url" href="/2019/09/27/MySQL锁/" title="MySQL中的锁">http://yoursite.com/2019/09/27/MySQL锁/</a>
    <p>
        <span class="copy-title">版权声明:</span><i class="fa fa-creative-commons"></i> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" title="CC BY-NC-SA 4.0 International" target = "_blank">"署名-非商用-相同方式共享 4.0"</a> 转载请保留原文链接及作者。
    </p>
</div>





    




    </div>
    <div class="copyright">
        <p class="footer-entry">©2016-2019 Yelog</p>
<p class="footer-entry">Built with <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/yelog/hexo-theme-3-hexo" target="_blank">3-hexo</a> theme</p>

    </div>
    <div class="full-toc">
        <button class="full"><span class="min "></span></button>
<button class="post-toc-menu"><span class="post-toc-menu-icons"></span></button>
<div class="post-toc"><span class="post-toc-title">目录</span>
    <div class="post-toc-content">

    </div>
</div>
<a class="" id="rocket" href="javascript:void(0)"></a>
    </div>
</div>
<div class="acParent"></div>

<div class="hide_box" onclick="dashangToggle()"></div>
<div class="shang_box">
    <a class="shang_close" href="javascript:void(0)" onclick="dashangToggle()">×</a>
    <div class="shang_tit">
        <p>喜欢就点赞,疼爱就打赏</p>
    </div>
    <div class="shang_payimg">
        <div class="pay_img">
            <img src="/img/alipay.jpg" class="alipay" title="扫码支持">
            <img src="/img/weixin.jpg" class="weixin" title="扫码支持">
        </div>
    </div>
    <div class="shang_payselect">
        <span><label><input type="radio" name="pay" checked value="alipay">支付宝</label></span><span><label><input type="radio" name="pay" value="weixin">微信</label></span>
    </div>
</div>


</body>
<script src="/js/jquery.pjax.js?v=1.0.1" ></script>

<script src="/js/script.js?v=1.0.1" ></script>
<script>
    var img_resize = 'default';
    /*作者、标签的自动补全*/
    $(function () {
        $('.search').AutoComplete({
            'data': ['#test',],
            'itemHeight': 20,
            'width': 418
        }).AutoComplete('show');
    })
    function initArticle() {
        /*渲染对应的表格样式*/
        
            $(".post .pjax table").addClass("green_title");
        

        /*渲染打赏样式*/
        
        $("input[name=pay]").on("click", function () {
            if($("input[name=pay]:checked").val()=="weixin"){
                $(".shang_box .shang_payimg .pay_img").addClass("weixin_img");
            } else {
                $(".shang_box .shang_payimg .pay_img").removeClass("weixin_img");
            }
        })
        

        /*高亮代码块行号*/
        
        $('pre code').each(function(){
            var lines = $(this).text().split('\n').length - 1, widther='';
            if (lines>99) {
                widther = 'widther'
            }
            var $numbering = $('<ul/>').addClass('pre-numbering ' + widther).attr("unselectable","on");
            $(this).addClass('has-numbering ' + widther)
                    .parent()
                    .append($numbering);
            for(var i=1;i<=lines;i++){
                $numbering.append($('<li/>').text(i));
            }
        });
        

        /*访问数量*/
        
        $.getScript("//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js");
        

        /*代码高亮，行号对齐*/
        $('.pre-numbering').css('line-height',$('.has-numbering').css('line-height'));

        
    }

    /*打赏页面隐藏与展示*/
    
    function dashangToggle() {
        $(".shang_box").fadeToggle();
        $(".hide_box").fadeToggle();
    }
    

</script>

<!--加入行号的高亮代码块样式-->

<style>
    pre{
        position: relative;
        margin-bottom: 24px;
        border-radius: 10px;
        border: 1px solid #e2dede;
        background: #FFF;
        overflow: hidden;
    }
    code.has-numbering{
        margin-left: 30px;
    }
    code.has-numbering.widther{
        margin-left: 35px;
    }
    .pre-numbering{
        margin: 0px;
        position: absolute;
        top: 0;
        left: 0;
        width: 20px;
        padding: 0.5em 3px 0.7em 5px;
        border-right: 1px solid #C3CCD0;
        text-align: right;
        color: #AAA;
        background-color: ;
    }
    .pre-numbering.widther {
        width: 35px;
    }
</style>

<!--自定义样式设置-->
<style>
    
    
    .nav {
        width: 542px;
    }
    .nav.fullscreen {
        margin-left: -542px;
    }
    .nav-left {
        width: 120px;
    }
    
    
    @media screen and (max-width: 1468px) {
        .nav {
            width: 492px;
        }
        .nav.fullscreen {
            margin-left: -492px;
        }
        .nav-left {
            width: 100px;
        }
    }
    
    
    @media screen and (max-width: 1024px) {
        .nav {
            width: 492px;
            margin-left: -492px
        }
        .nav.fullscreen {
            margin-left: 0;
        }
        .nav .hide-list.fullscreen {
            left: 492px
        }
    }
    
    @media screen and (max-width: 426px) {
        .nav {
            width: 100%;
        }
        .nav-left {
            width: 100%;
        }
    }
    
    
    .nav-right .title-list nav a .post-title, .nav-right .title-list #local-search-result a .post-title {
        color: #383636;
    }
    
    
    .nav-right .title-list nav a .post-date, .nav-right .title-list #local-search-result a .post-date {
        color: #5e5e5f;
    }
    
    
    .nav-right nav a.hover, #local-search-result a.hover{
        background-color: #e2e0e0;
    }
    
    

    /*列表样式*/
    
    .post .pjax article .article-entry>ol, .post .pjax article .article-entry>ul, .post .pjax article>ol, .post .pjax article>ul{
        border: #e2dede solid 1px;
        border-radius: 10px;
        padding: 10px 32px 10px 56px;
    }
    .post .pjax article .article-entry li>ol, .post .pjax article .article-entry li>ul,.post .pjax article li>ol, .post .pjax article li>ul{
        padding-top: 5px;
        padding-bottom: 5px;
    }
    .post .pjax article .article-entry>ol>li, .post .pjax article .article-entry>ul>li,.post .pjax article>ol>li, .post .pjax article>ul>li{
        margin-bottom: auto;
        margin-left: auto;
    }
    .post .pjax article .article-entry li>ol>li, .post .pjax article .article-entry li>ul>li,.post .pjax article li>ol>li, .post .pjax article li>ul>li{
        margin-bottom: auto;
        margin-left: auto;
    }
    

    /* 背景图样式 */
    
    


    /*引用块样式*/
    

    /*文章列表背景图*/
    
    .nav-right:before {
        content: ' ';
        display: block;
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        opacity: 0.3;
        background: url("https://i.loli.net/2019/07/22/5d3521411f3f169375.png");
        background-repeat: no-repeat;
        background-position: 50% 0;
        -ms-background-size: cover;
        -o-background-size: cover;
        -moz-background-size: cover;
        -webkit-background-size: cover;
        background-size: cover;
    }
    

    
</style>







</html>
